package com.doubao.wechat.service;

import com.doubao.common.result.Result;
import com.doubao.wechat.dto.request.WxLoginRequest;
import com.doubao.wechat.dto.response.WxUserInfoDTO;

import java.util.Map;

/**
 * 微信服务接口
 */
public interface WechatService {

    /**
     * 小程序登录，获取微信用户信息
     *
     * @param request 微信登录请求
     * @return 微信用户信息
     */
    Result<WxUserInfoDTO> miniappLogin(WxLoginRequest request);

    /**
     * 根据code获取微信session_key和openid
     *
     * @param code 微信临时code
     * @return session_key和openid信息
     */
    Map<String, Object> getSessionKey(String code);

    /**
     * 解密微信数据
     *
     * @param sessionKey    微信session_key
     * @param encryptedData 加密数据
     * @param iv            加密算法的初始向量
     * @return 解密后的数据
     */
    Map<String, Object> decryptData(String sessionKey, String encryptedData, String iv);

    /**
     * 保存或更新微信用户信息（通过调用用户服务）
     *
     * @param wxUserInfo 微信用户信息
     * @param userId     平台用户ID
     * @return 操作结果
     */
    Result<Void> saveOrUpdateWechatUser(WxUserInfoDTO wxUserInfo, Long userId);

    /**
     * 根据openid查询微信用户 (已过时, 请调用用户服务)
     *
     * @param openid     微信openid
     * @param openidType openid类型，如miniapp、official、web等
     * @return null
     * @deprecated 请调用用户服务相关接口
     */
    @Deprecated
    Void getByOpenid(String openid, String openidType);

    /**
     * 根据unionid查询微信用户 (已过时, 请调用用户服务)
     *
     * @param unionid 微信unionid
     * @return null
     * @deprecated 请调用用户服务相关接口
     */
    @Deprecated
    Void getByUnionid(String unionid);

    /**
     * 根据用户ID查询微信用户 (已过时, 请调用用户服务)
     *
     * @param userId 平台用户ID
     * @return null
     * @deprecated 请调用用户服务相关接口
     */
    @Deprecated
    Void getByUserId(Long userId);

    /**
     * 绑定微信用户和平台用户 (已过时, 请调用用户服务)
     *
     * @param wechatUserId 微信用户ID (不再使用)
     * @param userId       平台用户ID
     * @return 操作结果
     * @deprecated 请调用用户服务相关接口
     */
    @Deprecated
    Result<Void> bindUser(Long wechatUserId, Long userId);

    /**
     * 解绑微信用户和平台用户 (已过时, 请调用用户服务)
     *
     * @param userId 平台用户ID
     * @return 操作结果
     * @deprecated 请调用用户服务相关接口
     */
    @Deprecated
    Result<Void> unbindUser(Long userId);

    /**
     * 获取微信openid并关联到已有用户 (通过调用用户服务)
     *
     * @param userId 平台用户ID
     * @param code 微信临时授权码
     * @return 操作结果
     */
    Result<Void> bindOpenidToUser(Long userId, String code);
}